//package com.zyf.cloud.common.utils;
//
//import com.bonade.common.exception.BusinessException;
//import com.bonade.common.exception.IllegalParameterException;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.beanutils.BeanUtils;
//import org.apache.commons.lang3.StringUtils;
//
//import javax.servlet.http.HttpServletRequest;
//import java.io.Serializable;
//import java.util.Collection;
//import java.util.Iterator;
//import java.util.Map;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//
///**
// * 断言工具类
// *
// * @author YY
// */
//@Slf4j
//public class AssertUtil {
//    private AssertUtil() {}
//
//    private static String ERROR_MESSAGE_EMPTY = "字段不能为空！";
//    private static String ERROR_MESSAGE_PATTERN = "字段格式错误！";
//
//    /**
//     * 从对象中跟据键取出相应的值，支持{@link Map},{@link HttpServletRequest}, {@link String}, {@link Serializable}bean对象
//     *
//     * @param obj 存储值的对象
//     * @param key 键
//     * @return 相应的值 或者 {@code null}（如果出现异常或者没找到相应的键）
//     *
//     * @author YY
//     * @since 1.0.0
//     */
//    private static String getValue(Object obj, String key) {
//        if(obj == null) { return null; }
//        if(key == null) { return null; }
//
//        try {
//            if (obj instanceof Map) {
//                Map m = (Map) obj;
//                if(m.containsKey(key)) {
//                    return String.valueOf(m.get(key));
//                }
//                return null;
//            } else if (obj instanceof HttpServletRequest) {
//                HttpServletRequest request = (HttpServletRequest) obj;
//                return request.getParameter(key);
//            } else if (obj instanceof String) {
//                return (String) obj;
//            } else if (obj instanceof Serializable) {
//                return BeanUtils.getProperty(obj, key);
//            }
//        } catch (Exception e) {
//            log.error("获取参数出现异常：", e);
//            return null;
//        }
//
//        return null;
//    }
//
//    /**
//     * 断言value不能为{@code null}
//     * @param obj 存储值的对象
//     * @param key 键
//     * @throws
//     */
//    public static void assertNotNull(Object obj, String key) {
//        assertNotNull(getValue(obj, key), key + ERROR_MESSAGE_EMPTY);
//    }
//
//    /**
//     * 断言value不能为{@code null}
//     * @param obj 存储值的对象
//     * @param key 键
//     * @param message 错误消息
//     */
//    public static void assertNotNull(Object obj, String key, String message) {
//        assertNotNull(getValue(obj, key), message);
//    }
//
//    /**
//     * 断言value不能为{@code null}
//     * @param value 值
//     * @param message 错误消息
//     */
//    public static void assertNotNull(String value, String message) {
//        if(value == null) {
//            throw new IllegalParameterException(message);
//        }
//    }
//
//    /**
//     * 断言value不能为{@code null}或者{@code ""}
//     * @param obj 存储值的对象
//     * @param key 键
//     * @throws
//     */
//    public static void assertNotEmpty(Object obj, String key) {
//        assertNotEmpty(getValue(obj, key), key + ERROR_MESSAGE_EMPTY);
//    }
//
//    /**
//     * 断言value不能为{@code null}或者{@code ""}
//     * @param obj 存储值的对象
//     * @param key 键
//     * @param message 错误消息
//     */
//    public static void assertNotEmpty(Object obj, String key, String message) {
//        assertNotEmpty(getValue(obj, key), message);
//    }
//    /**
//     * 断言value不能为{@code null}或者{@code ""}
//     * @param value 值
//     * @param message 错误消息
//     */
//    public static void assertNotEmpty(String value, String message) {
//        if(StringUtils.isEmpty(value)) {
//            throw new IllegalParameterException(message);
//        }
//    }
//
//    /**
//     * 断言value不能为{@code null}或者{@code ""}或者仅包含空格
//     * @param obj 存储值的对象
//     * @param key 键
//     * @throws
//     */
//    public static void assertNotBlank(Object obj, String key) {
//        assertNotBlank(getValue(obj, key), key + ERROR_MESSAGE_EMPTY);
//    }
//
//    /**
//     * 断言value不能为{@code null}或者{@code ""}或者仅包含空格
//     * @param obj 存储值的对象
//     * @param key 键
//     * @param message 错误消息
//     */
//    public static void assertNotBlank(Object obj, String key, String message) {
//        assertNotBlank(getValue(obj, key), message);
//    }
//
//    /**
//     * 断言value不能为{@code null}或者{@code ""}或者仅包含空格
//     * @param value 值
//     * @param message 错误消息
//     */
//    public static void assertNotBlank(String value, String message) {
//        if(StringUtils.isBlank(value)) {
//            throw new IllegalParameterException(message);
//        }
//    }
//
//    /**
//     * 断言value不能为空，且需匹配相应的正则表达式
//     * @param obj 存储值的对象
//     * @param key 键
//     * @throws
//     */
//    public static void assertPattern(Object obj, String key, String regex) {
//        assertPattern(getValue(obj, key), regex, key + ERROR_MESSAGE_PATTERN);
//    }
//
//    /**
//     * 断言value不能为空，且需匹配相应的正则表达式
//     * @param obj 存储值的对象
//     * @param key 键
//     * @param message 错误消息
//     */
//    public static void assertPattern(Object obj, String key, String regex, String message) {
//        assertPattern(getValue(obj, key), regex, message);
//    }
//
//    /**
//     * 断言value不能为空，且需匹配相应的正则表达式
//     * @param value 值
//     * @param regex 正则表达式
//     * @param message 错误消息
//     */
//    public static void assertPattern(String value, String regex, String message) {
//        assertNotBlank(value, message);
//
//        Pattern pattern = Pattern.compile(regex);
//        Matcher matcher = pattern.matcher(value);
//        if(!matcher.matches()) {
//            throw new IllegalParameterException(message);
//        }
//    }
//
//    /**
//     * 断言value要么为空，要么匹配相应的正则表达式
//     * @param obj 存储值的对象
//     * @param key 键
//     * @throws
//     */
//    public static void assertNullOrPattern(Object obj, String key, String regex) {
//        assertNullOrPattern(getValue(obj, key), regex, key + ERROR_MESSAGE_PATTERN);
//    }
//
//    /**
//     * 断言value要么为空，要么匹配相应的正则表达式
//     * @param obj 存储值的对象
//     * @param key 键
//     * @param message 错误消息
//     */
//    public static void assertNullOrPattern(Object obj, String key, String regex, String message) {
//        assertNullOrPattern(getValue(obj, key), regex, message);
//    }
//
//    /**
//     * 断言value要么为空，要么匹配相应的正则表达式
//     * @param value 值
//     * @param regex 正则表达式
//     * @param message 错误消息
//     */
//    public static void assertNullOrPattern(String value, String regex, String message) {
//        if(value != null) {
//            assertPattern(value, regex, message);
//        }
//    }
//
//    /**
//     * 断言value要么为空，要么匹配相应的正则表达式
//     * @param obj 存储值的对象
//     * @param key 键
//     * @param iterator 数据迭代器
//     * @throws
//     */
//    public static void assertInCollection(Object obj, String key, Iterator<String> iterator) {
//        assertInCollection(getValue(obj, key), iterator, key + ERROR_MESSAGE_PATTERN);
//    }
//
//    /**
//     * 断言value要么为空，要么匹配相应的正则表达式
//     * @param obj 存储值的对象
//     * @param key 键
//     * @param iterator 数据迭代器
//     * @param message 错误消息
//     */
//    public static void assertInCollection(Object obj, String key, Iterator<String> iterator, String message) {
//        assertInCollection(getValue(obj, key), iterator, message);
//    }
//
//    /**
//     * 断言value要么为空，要么匹配相应的正则表达式
//     * @param value 值
//     * @param iterator 数据迭代器
//     * @param message 错误消息
//     */
//    public static void assertInCollection(String value, Iterator<String> iterator, String message) {
//        assertNotNull(value, message);
//
//        while(iterator.hasNext()) {
//            String element = iterator.next();
//            if(value.equals(element)) {
//                return;
//            }
//        }
//        throw new IllegalParameterException(message);
//    }
//
//    /**
//     * 断言object不能为{@code null}
//     * @param obj 值对象
//     * @param message 错误提示
//     * @throws
//     */
//    public static void assertObjectNotNull(Object obj, String message) {
//        if(obj == null) {
//            throw new IllegalParameterException(message);
//        }
//    }
//
//    /**
//     * 断言表达式为真
//     * @param message
//     */
//    public static void assertTrue(boolean result, String message) {
//        if(!result) {
//            throw new BusinessException(message);
//        }
//    }
//
//
//    public static void notNull(Object object, String key) {
//        if (isEmpty(object)) {
//            throw new BusinessException(key);
//        }
//    }
//    public static final boolean isEmpty(Object pObj) {
//        if (pObj == null || "".equals(pObj))
//            return true;
//        if (pObj instanceof String) {
//            if (((String) pObj).trim().length() == 0) {
//                return true;
//            }
//        } else if (pObj instanceof Collection<?>) {
//            if (((Collection<?>) pObj).size() == 0) {
//                return true;
//            }
//        } else if (pObj instanceof Map<?, ?>) {
//            if (((Map<?, ?>) pObj).size() == 0) {
//                return true;
//            }
//        }
//        return false;
//    }
//}
